FUEGO
PUNTOS: 0
VIDAS: 3
MUNDO: 1-1
TIEMPO: 300
GARRAVACES: 0/20
CRISTALES: 0
BOMBAS: 3
Enemigos: 0
Distancia: 0m
*
^
<
v
>
Toca
RUN
HIT
BOMB
3
JUMP
Gira tu dispositivo

ESCAPE DE
PUENTE GRANDE

El parque de la Terraza

PAUSA

AJUSTES

45%
70%
100%
55%
ZONA SECRETA!
PODER!

Estado

{ SHEETS[key] = { img, ...cfg }; }; img.onerror = () => { console.warn('Sheet load fail:', cfg.src); }; } } function getSheetFrame(key, row, col) { const s = SHEETS[key]; if (!s || !s.img || !s.img.complete || s.img.naturalWidth === 0) return null; return { img: s.img, sx: col * s.fw, sy: row * s.fh, sw: s.fw, sh: s.fh }; } function drawSheetFrame(c, key, row, col, dx, dy, dw, dh) { const s = SHEETS[key]; if (!s || !s.img || !s.img.complete || s.img.naturalWidth === 0) return false; c.drawImage(s.img, col * s.fw, row * s.fh, s.fw, s.fh, dx, dy, dw, dh); return true; } function getAnimFrame2(anim, now) { if (!anim || !anim.frames || anim.frames.length === 0) return null; const idx = Math.floor(now / (anim.speed || 100)) % anim.frames.length; return getSheetFrame(anim.sheet, anim.row, anim.frames[idx]); } // Animation definitions const A = { rafa: { idle: { sheet: 'rafa', row: 0, frames: [0,1,2,3], speed: 200 }, walk: { sheet: 'rafa', row: 1, frames: [0,1,2,3], speed: 100 }, jump: { sheet: 'rafa', row: 2, frames: [0,1], speed: 150 }, fall: { sheet: 'rafa', row: 2, frames: [2,3], speed: 150 }, atk: { sheet: 'rafa', row: 3, frames: [0,1,2,3], speed: 70 }, fire: { sheet: 'rafa', row: 4, frames: [0,1,2,3], speed: 70 }, pwr: { sheet: 'rafa', row: 5, frames: [0,1,2,3], speed: 120 }, }, puerco: { idle: { sheet: 'puercos', row: 0, frames: [0,1,2,3], speed: 200 }, walk: { sheet: 'puercos', row: 1, frames: [0,1,2,3], speed: 120 }, atk: { sheet: 'puercos', row: 2, frames: [0,1,2,3], speed: 80 }, hurt: { sheet: 'puercos', row: 3, frames: [0,1], speed: 150 }, die: { sheet: 'puercos', row: 3, frames: [2,3], speed: 200 }, }, warriza: { idle: { sheet: 'warriza', row: 0, frames: [0,1,2,3], speed: 180 }, walk: { sheet: 'warriza', row: 1, frames: [0,1,2,3], speed: 100 }, atk: { sheet: 'warriza', row: 2, frames: [0,1,2,3], speed: 70 }, fire: { sheet: 'warriza', row: 3, frames: [0,1,2,3], speed: 80 }, pwr: { sheet: 'warriza', row: 4, frames: [0,1,2,3], speed: 120 }, }, tiburon: { swim: { sheet: 'tiburones', row: 0, frames: [0,1,2,3], speed: 150 }, atk: { sheet: 'tiburones', row: 1, frames: [0,1,2,3], speed: 100 }, die: { sheet: 'tiburones', row: 2, frames: [0,1,2,3], speed: 200 }, }, nube: { idle: { sheet: 'nube_boss', row: 0, frames: [0,1,2,3], speed: 180 }, chg: { sheet: 'nube_boss', row: 1, frames: [0,1,2,3], speed: 120 }, atk: { sheet: 'nube_boss', row: 2, frames: [0,1,2,3], speed: 80 }, die: { sheet: 'nube_boss', row: 3, frames: [0,1,2,3], speed: 200 }, }, chata: { idle: { sheet: 'chata', row: 0, frames: [0,1,2,3], speed: 200 }, walk: { sheet: 'chata', row: 1, frames: [0,1,2,3], speed: 120 }, atk: { sheet: 'chata', row: 2, frames: [0,1,2,3], speed: 80 }, cheer:{ sheet: 'chata', row: 3, frames: [0,1,2,3], speed: 150 }, }, }; // Inicializar sistema de spritesheets V2 loadSheets();